/**
 * @file 进程监控预加载脚本
 * @description 为渲染进程提供进程监控相关的API
 * @author 黄敏
 * @version 1.0.0
 * @since 2025-07-09
 */

import type { ProcessDetail } from '~types/common'

import { processTopic } from '~shared/ipc-topic'

// @ts-ignore
const electron = require('electron')

/**
 * 进程监控API对象
 * @description 提供进程信息获取和监控功能
 */
export const monitor = {
  /**
   * 开始进程监控
   * @param interval - 监控间隔（毫秒），默认1000ms
   * @param callback - 监控数据回调函数
   * @returns 停止监控的函数
   */
  startMonitoring: (callback: (data: ProcessDetail) => void, interval = 1000): (() => void) => {
    let isMonitoring = true
    let timeoutId: NodeJS.Timeout

    const monitor = async () => {
      if (!isMonitoring) return

      try {
        const data: ProcessDetail = await electron.ipcRenderer.invoke(processTopic.get)
        callback(data)
      } catch (error) {
        console.error('进程监控获取数据失败:', error)
      }

      if (isMonitoring) {
        timeoutId = setTimeout(monitor, interval)
      }
    }

    // 立即执行一次
    monitor()

    // 返回停止监控的函数
    return () => {
      isMonitoring = false
      if (timeoutId) {
        clearTimeout(timeoutId)
      }
    }
  }
}
